/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import DAO.util.ConectaBanco;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import model.Produto;

/**
 *
 * @author Alberto
 */
public class ProdutoDAO {

    public boolean criar(Produto produto) {
        try {

            System.out.println("dao !");
            Connection conexao = ConectaBanco.getConexao();

            String sql = "insert into produto(codigo, nome, quantidade, status) values (?,?,?,1)";
            // seta os parametros no sql
            PreparedStatement pstmt = conexao.prepareCall(sql);
            pstmt.setString(1, produto.getCodigo());
            pstmt.setString(2, produto.getNome());
            pstmt.setInt(3, produto.getQuantidade());

            System.out.println(sql);
            pstmt.execute();

            conexao.close();
            return true;

        } catch (SQLException sql) {

            return false;

        }
    }

    public ArrayList<Produto> buscarTodas(String nome) throws ClassNotFoundException {
        ArrayList<Produto> produtos = new ArrayList<Produto>();
        Connection conexao = null;
        try {
            conexao = ConectaBanco.getConexao();
            String sql = "select * from produto where nome ilike ? or codigo ilike ? and status=1 ";

            PreparedStatement pst = conexao.prepareStatement(sql);

            pst.setString(1, nome + "%");
            pst.setString(2, nome + "%");
            ResultSet rs = pst.executeQuery();

            while (rs.next()) {
                Produto produto = new Produto();
                produto.setCodigo(rs.getString("codigo"));
                produto.setNome(rs.getString("nome"));
                produto.setQuantidade(rs.getInt("quantidade"));
                produtos.add(produto);
            }
            conexao.close();

            return produtos;

        } catch (SQLException sql) {
            return null;
        }

    }

    public Produto buscarLoginByCodigo(String codigo) throws ClassNotFoundException, SQLException {

        Connection conexao = ConectaBanco.getConexao();
        PreparedStatement sql = conexao.prepareStatement("select * from produto where codigo ilike ? and status=1");
        sql.setString(1, codigo);
        ResultSet resultado = sql.executeQuery();

        Produto produto = new Produto();
        
        while (resultado.next()) {
            produto.setCodigo(resultado.getString("codigo"));
            produto.setNome(resultado.getString("nome"));
            produto.setQuantidade(resultado.getInt("quantidade"));

        }

        conexao.close();
        return produto;
    }

    public Produto buscarPorNome(String codigo) throws ClassNotFoundException, SQLException {

        Connection conexao = ConectaBanco.getConexao();
        PreparedStatement sql = conexao.prepareStatement("select * from produto where codigo = ? or nome = ?");
        sql.setString(1,codigo);
        sql.setString(2,codigo);
        ResultSet resultado = sql.executeQuery();

        Produto produto = new Produto();
        while (resultado.next()) {
            produto.setCodigo(resultado.getString("codigo"));
            System.out.println("teste 1" + resultado.getString("codigo"));
            produto.setNome(resultado.getString("nome"));
            produto.setQuantidade(resultado.getInt("quantidade"));

        }

        conexao.close();
        return produto;
    }

    public boolean atualizar(Produto produto) {
        try {
            Connection conexao = ConectaBanco.getConexao();

            String sql = "update produto set nome=?, quantidade=? where codigo = ?";

            PreparedStatement pstmt = conexao.prepareCall(sql);
            pstmt.setString(1, produto.getNome());
            pstmt.setInt(2, produto.getQuantidade());
            pstmt.setString(3, produto.getCodigo());

            pstmt.execute();
            System.out.println("Cadastro realizado com sucesso");
            conexao.close();
            return true;
        } catch (SQLException sql) {
            System.out.println("Erro ao atualizar registro");

            return false;

        }
    }
    
    
    
    

    public boolean marcarInativo(String codigo) {
        try {
            Connection conexao = ConectaBanco.getConexao();
            System.out.println("Id dentro do método marcar inativo " + codigo);
            String sql = "update produto set status=0 where codigo ilike ?";

            PreparedStatement pstmt = conexao.prepareCall(sql);

            pstmt.setString(1, codigo);

            pstmt.execute();

            conexao.close();
            return true;
        } catch (SQLException sql) {

            return false;

        }
    }
}
